@echo off
setlocal EnableDelayedExpansion

:: =====================================================
:: Docker MySQL 独立安装和连接脚本 (Windows版本)
:: 功能：自动安装、配置和连接MySQL数据库 国内镜像 速度很快 https://docker.1panel.live
:: =====================================================

title Docker MySQL 安装和连接脚本

echo ===============================================
echo    Docker MySQL 独立安装和连接脚本
echo ===============================================
echo.

:: 检查Docker是否安装
echo [1/6] 检查Docker环境...
docker --version > nul 2>&1
if errorlevel 1 (
    echo ❌ 错误：Docker未安装，请先安装Docker Desktop
    echo 下载地址：https://www.docker.com/products/docker-desktop
    pause
    exit /b 1
)
echo ✅ Docker已安装

:: 检查Docker是否运行
echo [2/6] 检查Docker运行状态...
docker info > nul 2>&1
if errorlevel 1 (
    echo ❌ 错误：Docker未运行，请先启动Docker Desktop
    echo 等待Docker启动后按任意键继续...
    pause
    
    :: 再次检查
    docker info > nul 2>&1
    if errorlevel 1 (
        echo ❌ Docker仍未运行，请手动启动Docker Desktop后重新运行此脚本
        pause
        exit /b 1
    )
)
echo ✅ Docker运行正常

:: 设置变量
set MYSQL_CONTAINER_NAME=quantitative_mysql
set MYSQL_ROOT_PASSWORD=quantitative_password
set MYSQL_DATABASE=quantitative_advanced
set MYSQL_USER=quantitative_user
set MYSQL_PASSWORD=quantitative_password
set MYSQL_PORT=3306
set PHPMYADMIN_PORT=8080

:: 检查容器是否已存在
echo [3/6] 检查现有MySQL容器...
docker ps -a --format "table {{.Names}}" | findstr /C:"%MYSQL_CONTAINER_NAME%" > nul
if not errorlevel 1 (
    echo ⚠️  发现现有MySQL容器：%MYSQL_CONTAINER_NAME%
    echo.
    echo 选择操作：
    echo 1. 停止并删除现有容器，重新创建
    echo 2. 启动现有容器
    echo 3. 退出
    echo.
    set /p choice="请选择 (1-3): "
    
    if "!choice!"=="1" (
        echo 正在停止并删除现有容器...
        docker stop %MYSQL_CONTAINER_NAME% > nul 2>&1
        docker rm %MYSQL_CONTAINER_NAME% > nul 2>&1
        echo ✅ 现有容器已删除
    ) else if "!choice!"=="2" (
        echo 正在启动现有容器...
        docker start %MYSQL_CONTAINER_NAME%
        goto :connection_info
    ) else (
        echo 退出脚本
        pause
        exit /b 0
    )
)

:: 拉取MySQL镜像
echo [4/6] 拉取MySQL 8.0镜像...
docker pull mysql:8.0
if errorlevel 1 (
    echo ❌ 错误：无法拉取MySQL镜像
    pause
    exit /b 1
)
echo ✅ MySQL镜像拉取完成

:: 创建并启动MySQL容器
echo [5/6] 创建并启动MySQL容器...
docker run -d ^
    --name %MYSQL_CONTAINER_NAME% ^
    --restart unless-stopped ^
    -p %MYSQL_PORT%:3306 ^
    -e MYSQL_ROOT_PASSWORD=%MYSQL_ROOT_PASSWORD% ^
    -e MYSQL_DATABASE=%MYSQL_DATABASE% ^
    -e MYSQL_USER=%MYSQL_USER% ^
    -e MYSQL_PASSWORD=%MYSQL_PASSWORD% ^
    mysql:8.0 ^
    --character-set-server=utf8mb4 ^
    --collation-server=utf8mb4_unicode_ci ^
    --default-authentication-plugin=mysql_native_password

if errorlevel 1 (
    echo ❌ 错误：无法创建MySQL容器
    pause
    exit /b 1
)
echo ✅ MySQL容器创建成功

:: 等待MySQL启动
echo [6/6] 等待MySQL服务启动...
set /a count=0
:wait_loop
timeout /t 3 /nobreak > nul
set /a count+=1

:: 测试MySQL连接
docker exec %MYSQL_CONTAINER_NAME% mysqladmin ping -h localhost -u root -p%MYSQL_ROOT_PASSWORD% > nul 2>&1
if not errorlevel 1 (
    echo ✅ MySQL服务启动完成
    goto :connection_info
)

if %count% LSS 20 (
    echo 等待中... (%count%/20)
    goto :wait_loop
) else (
    echo ❌ 等待超时，MySQL可能启动失败
    echo 检查容器日志：
    docker logs %MYSQL_CONTAINER_NAME%
    pause
    exit /b 1
)

:connection_info
echo.
echo ===============================================
echo           MySQL 安装完成！
echo ===============================================
echo.
echo 📊 数据库连接信息：
echo   主机地址: localhost (或 127.0.0.1)
echo   端口:     %MYSQL_PORT%
echo   数据库:   %MYSQL_DATABASE%
echo   用户名:   %MYSQL_USER%
echo   密码:     %MYSQL_PASSWORD%
echo.
echo 🔧 管理员信息：
echo   用户名:   root
echo   密码:     %MYSQL_ROOT_PASSWORD%
echo.
echo 🐳 容器管理命令：
echo   启动容器: docker start %MYSQL_CONTAINER_NAME%
echo   停止容器: docker stop %MYSQL_CONTAINER_NAME%
echo   删除容器: docker rm %MYSQL_CONTAINER_NAME%
echo   查看日志: docker logs %MYSQL_CONTAINER_NAME%
echo.

:: 询问是否安装phpMyAdmin
echo ===============================================
echo 是否安装phpMyAdmin Web管理界面？
echo ===============================================
set /p install_phpmyadmin="安装phpMyAdmin? (y/n): "

if /i "!install_phpmyadmin!"=="y" (
    echo 正在安装phpMyAdmin...
    
    docker run -d ^
        --name quantitative_phpmyadmin ^
        --restart unless-stopped ^
        -p %PHPMYADMIN_PORT%:80 ^
        -e PMA_HOST=host.docker.internal ^
        -e PMA_PORT=%MYSQL_PORT% ^
        phpmyadmin/phpmyadmin
    
    if not errorlevel 1 (
        echo ✅ phpMyAdmin安装成功
        echo.
        echo 🌐 phpMyAdmin访问信息：
        echo   URL:     http://localhost:%PHPMYADMIN_PORT%
        echo   用户名:  root 或 %MYSQL_USER%
        echo   密码:    %MYSQL_ROOT_PASSWORD% 或 %MYSQL_PASSWORD%
        echo.
        echo 🚀 正在打开phpMyAdmin...
        timeout /t 3 /nobreak > nul
        start http://localhost:%PHPMYADMIN_PORT%
    ) else (
        echo ❌ phpMyAdmin安装失败
    )
)

:: 测试数据库连接
echo.
echo ===============================================
echo 是否测试数据库连接？
echo ===============================================
set /p test_connection="测试连接? (y/n): "

if /i "!test_connection!"=="y" (
    echo 正在测试数据库连接...
    
    :: 使用MySQL客户端测试连接
    docker exec %MYSQL_CONTAINER_NAME% mysql -u %MYSQL_USER% -p%MYSQL_PASSWORD% -D %MYSQL_DATABASE% -e "SELECT 'MySQL连接成功!' AS status, NOW() AS current_time;"
    
    if not errorlevel 1 (
        echo ✅ 数据库连接测试成功！
    ) else (
        echo ❌ 数据库连接测试失败
        echo 请检查容器状态: docker ps
    )
)

echo.
echo ===============================================
echo           安装完成！
echo ===============================================
echo.
echo 💡 下一步操作：
echo   1. 使用提供的连接信息连接数据库
echo   2. 运行你的应用程序
echo   3. 访问 phpMyAdmin 进行数据库管理 (如果已安装)
echo.
echo 📝 重要提示：
echo   - 容器会在系统重启后自动启动
echo   - 数据保存在Docker卷中，删除容器不会丢失数据
echo   - 如需备份数据，请使用mysqldump命令
echo.

pause
